package com.msxt.controller;

import com.msxt.result.R;
import com.msxt.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("file")
public class FileController {
	@Autowired
	private AliOssUtil aliOssUtil;

	@PostMapping("/upload")
	public R upload(MultipartFile file) {
		try {
			String originalFilename = file.getOriginalFilename();
			log.info("文件上传,原始文件名：{}", originalFilename);

			// 生成唯一文件名
			String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
			String objectName = UUID.randomUUID().toString() + suffix;

			// 上传到OSS
			String url = aliOssUtil.upload(file.getBytes(), objectName);

			log.info("文件上传成功，OSS URL: {}", url);

			// 直接返回完整的OSS URL，不要添加任何前缀
			return R.ok().put("file", url);
		} catch (IOException e) {
			log.error("文件上传失败", e);
			return R.error("文件上传失败");
		}
	}
}
//	@RequestMapping("/upload")
//	@IgnoreAuth
//	public R upload(@RequestParam("file") MultipartFile file, String type) throws Exception {
//		if (file.isEmpty()) {
//			throw new EIException("上传文件不能为空");
//		}
//
//		// 获取文件扩展名
//		String originalFilename = file.getOriginalFilename();
//		String fileExt = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
//
//		// 准备上传目录
//		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
//		if (!path.exists()) {
//			path = new File("");
//		}
//
//		File upload = new File(path.getAbsolutePath(), "/upload/");
//		if (!upload.exists()) {
//			upload.mkdirs();
//		}
//
//		// 生成唯一文件名
//		String fileName = new Date().getTime() + "." + fileExt;
//		File dest = new File(upload.getAbsolutePath() + "/" + fileName);
//
//		// 保存文件
//		file.transferTo(dest);
//
//		/*
//		 * 如果使用idea或者eclipse重启项目，发现之前上传的图片或者文件丢失，将下面一行代码注释打开
//		 * 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径，
//		 * 并且项目路径不能存在中文、空格等特殊字符
//		 */
//		// FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName));
//
//		// 如果是人脸文件(type=1)，更新配置
//		if (StringUtils.isNotBlank(type) && "1".equals(type)) {
//			ConfigEntity configEntity = configService.getOne(
//					new QueryWrapper<ConfigEntity>().eq("name", "faceFile"));
//
//			if (configEntity == null) {
//				configEntity = new ConfigEntity();
//				configEntity.setName("faceFile");
//				configEntity.setValue(fileName);
//			} else {
//				configEntity.setValue(fileName);
//			}
//			configService.saveOrUpdate(configEntity);
//		}
//
//		return R.ok().put("file", fileName);
//	}

	/**
	 * 下载文件
	 */
//	@IgnoreAuth
//	@RequestMapping("/download")
//	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
//		try {
//			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
//			if (!path.exists()) {
//				path = new File("");
//			}
//
//			File upload = new File(path.getAbsolutePath(), "/upload/");
//			if (!upload.exists()) {
//				upload.mkdirs();
//			}
//
//			File file = new File(upload.getAbsolutePath() + "/" + fileName);
//			if (file.exists()) {
//				HttpHeaders headers = new HttpHeaders();
//				headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//				headers.setContentDispositionFormData("attachment", fileName);
//				return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
//	}
//}